package br.com.mensageiro.apresentacao.managedbean;

import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import br.com.mensageiro.apresentacao.mensagens.MensagemJSF;
import br.com.mensageiro.negocio.dao.GrupoDAO;
import br.com.mensageiro.negocio.entidade.Grupo;
import br.com.mensageiro.negocio.servico.IGenericService;
import br.com.mensageiro.negocio.servico.IGrupoService;

@Component
@Scope("session")
public class GrupoMB extends GenericManagedBeanCRUD<Grupo> {
	@Autowired
	private IGrupoService grupoService;
	@Autowired
	private GrupoDAO grupoDAO;
	@Autowired
	private MensagemJSF addMensagem;

	protected RequestContext context;
	private Grupo grupo = new Grupo();

	@SuppressWarnings("rawtypes")
	private DataModel dmListaGrupo;

	public void prepararAdicionarGrupo(ActionEvent actionEvent) {
		this.grupo = new Grupo();
	}

	public void prepararAlterarGrupo(ActionEvent actionEvent) {
		this.grupo = (Grupo) dmListaGrupo.getRowData();
	}

	public void salvarGrupo(ActionEvent actionEvent) {
		context = RequestContext.getCurrentInstance();

		try {
			grupoService.inserir(grupo);
			addMensagem.addInfo("Grupo inserido com sucesso!");
			context.execute("dialogGerenciarGrupo.hide()");
		} catch (Exception e) {
			e.printStackTrace();
			addMensagem.addFatal("Erro ao inserir grupo!");
		}
		dmListaGrupo = null;
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public DataModel getDmListaGrupo() {
		if (dmListaGrupo == null) {
			dmListaGrupo = new ListDataModel(grupoDAO.getListaGrupos());
		}
		return dmListaGrupo;
	}

	public Grupo getGrupo() {
		return grupo;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	@Override
	public IGenericService<Grupo> getService() {
		return grupoService;
	}

	public GrupoMB(Class<Grupo> classBean) {
		super(classBean);
	}

	public GrupoMB() {
		super(Grupo.class);
	}
}
